package com.bbva.itradecomex.controller.vistaCliente;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;
import javax.faces.model.SelectItem;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.jsf.FacesContextUtils;

import com.bbva.itradecomex.bo.iface.ClienteBusquedaBO;
import com.bbva.itradecomex.controller.ComunController;
import com.bbva.itradecomex.domain.ClienteDatos;
import com.bbva.itradecomex.domain.TipoDocumento;
import com.bbva.itradecomex.util.Constantes;
import com.bbva.itradecomex.util.MessageProvider;

@Controller
@RequestScoped
@ManagedBean
public class BusquedaClienteController {
	
	private static final Logger log = Logger.getLogger(BusquedaClienteController.class);
	
	@Autowired
	private ClienteBusquedaBO clienteBusquedaBO;

	private String valorBusqueda;
	
	private List<ClienteDatos> listCliente;
	private ClienteDatos clienteSeleccionado;
	
	private boolean mostrarCajaRUC;
	private boolean mostrarCajaCodigoCliente;
	private boolean mostrarCajaRazonSocial;
	
	public void onPageLoad(ComponentSystemEvent event){
		try {
			if(!FacesContext.getCurrentInstance().isPostback()){
				clienteSeleccionado = null;
				valorBusqueda = Constantes.VACIO;
				listCliente = new ArrayList<ClienteDatos>();
				
				ComunController comunController = (ComunController)FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance())
						.getBean("comunController");
				comunController.inicializarValores();
				comunController.cargarListTipoDocumento2();
				
				actualizarCajaBusqueda();
			}
		} catch (Exception e) {
			e.printStackTrace();
			log.error(e.getMessage(),e);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
					MessageProvider.getInstance().getValue("MSG_ERROR_TITLE_GENERAL"),
					MessageProvider.getInstance().getValue("MSG_ERROR_DESCRIP_GENERAL")));
		}
	}
	
	public void actualizarCajaBusqueda(){
		valorBusqueda = Constantes.VACIO;
		
		ComunController comunController = (ComunController)FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance())
				.getBean("comunController");
		
		TipoDocumento tipoDoc = comunController.getTipoDocSeleccionado();
		
		if(tipoDoc == null){
			List<SelectItem> listTipoDoc = comunController.getListTipoDocumento();
			if(listTipoDoc != null && listTipoDoc.size() > 0){
				tipoDoc = (TipoDocumento)listTipoDoc.get(0).getValue();
			}
		}
		
		if(tipoDoc != null){
			if(MessageProvider.getInstance().getValue("CODIGO_TIPODOC_RUC").equals(tipoDoc.getCodTipoDocumento())){
				mostrarCajaRUC = true;
				mostrarCajaCodigoCliente = false;
				mostrarCajaRazonSocial = false;
			}else if(MessageProvider.getInstance().getValue("CODIGO_TIPODOC_CODIGOCLIENTE").equals(tipoDoc.getCodTipoDocumento())){
				mostrarCajaRUC = false;
				mostrarCajaCodigoCliente = true;
				mostrarCajaRazonSocial = false;
			}else if(MessageProvider.getInstance().getValue("CODIGO_TIPODOC_RAZONSOCIAL").equals(tipoDoc.getCodTipoDocumento())){
				mostrarCajaRUC = false;
				mostrarCajaCodigoCliente = false;
				mostrarCajaRazonSocial = true;
			}
		}
	}
	
	public void actionBuscar(){
		String codTipoDoc = Constantes.VACIO;
		String valueBusqueda = Constantes.VACIO;
		listCliente = new ArrayList<ClienteDatos>();
		
		try {
			ComunController comunController = (ComunController)FacesContextUtils.getWebApplicationContext(FacesContext.
								getCurrentInstance()).getBean("comunController");
			
			TipoDocumento obTipoDoc = comunController.getTipoDocSeleccionado();
			if(obTipoDoc != null && obTipoDoc.getCodTipoDocumento() != null){
				codTipoDoc = obTipoDoc.getCodTipoDocumento();
			}
			
			if(valorBusqueda != null){
				valueBusqueda = valorBusqueda;
			}
			
			listCliente = clienteBusquedaBO.getListDatoCliente(codTipoDoc, valueBusqueda);
			
			if(listCliente != null && listCliente.size() == 1){
				clienteSeleccionado = listCliente.get(0);
				FacesContext ctx = FacesContext.getCurrentInstance();
		    	ExternalContext extContext = ctx.getExternalContext();
		    	String url = extContext.encodeActionURL(ctx.getApplication().getViewHandler().
		    			getActionURL(ctx, "/pages/cliente/importaciones.xhtml"));
	            extContext.redirect(url);
			}
		} catch (Exception e) {
			e.printStackTrace();
			log.error(e.getMessage(),e);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
					MessageProvider.getInstance().getValue("MSG_ERROR_TITLE_GENERAL"),
					MessageProvider.getInstance().getValue("MSG_ERROR_DESCRIP_GENERAL")));
		}
	}
	
	public void cargarPaginaInicioCliente(String codCliente){
		clienteSeleccionado = null;
		for(int i=0; i<listCliente.size(); i++){
			ClienteDatos ob = listCliente.get(i);
			if(codCliente.equals(ob.getStrCodCliente())){
				clienteSeleccionado = ob;
				break;
			}
		}
		
		try {
			if(clienteSeleccionado != null){
				FacesContext ctx = FacesContext.getCurrentInstance();
		    	ExternalContext extContext = ctx.getExternalContext();
		        
	            String url = extContext.encodeActionURL(ctx.getApplication().getViewHandler().
	            		getActionURL(ctx, "/pages/cliente/importaciones.xhtml"));
	            extContext.redirect(url);
			}
		}catch(Exception e){
			e.printStackTrace();
			log.error(e.getMessage(),e);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
					MessageProvider.getInstance().getValue("MSG_ERROR_TITLE_GENERAL"),
					MessageProvider.getInstance().getValue("MSG_ERROR_DESCRIP_GENERAL")));
        }
	}
	
	public void cargarPaginaBusquedaCliente(){
		clienteSeleccionado = null;
		valorBusqueda = Constantes.VACIO;
		listCliente = new ArrayList<ClienteDatos>();
		
		FacesContext ctx = FacesContext.getCurrentInstance();
    	ExternalContext extContext = ctx.getExternalContext();
        
        String url = extContext.encodeActionURL(ctx.getApplication().getViewHandler().
        		getActionURL(ctx, "/pages/cliente/busquedaCliente.xhtml"));
        try {
			extContext.redirect(url);
		} catch (IOException e) {
			e.printStackTrace();
			log.error(e.getMessage(),e);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
					MessageProvider.getInstance().getValue("MSG_ERROR_TITLE_GENERAL"),
					MessageProvider.getInstance().getValue("MSG_ERROR_DESCRIP_GENERAL")));
		}
	}

	public ClienteDatos getClienteSeleccionado() {
		return clienteSeleccionado;
	}
	
	public void setClienteSeleccionado(ClienteDatos clienteSeleccionado) {
		this.clienteSeleccionado = clienteSeleccionado;
	}
	
	public String getValorBusqueda() {
		return valorBusqueda;
	}
	
	public void setValorBusqueda(String valorBusqueda) {
		this.valorBusqueda = valorBusqueda;
	}

	public boolean isMostrarCajaRUC() {
		return mostrarCajaRUC;
	}

	public void setMostrarCajaRUC(boolean mostrarCajaRUC) {
		this.mostrarCajaRUC = mostrarCajaRUC;
	}

	public boolean isMostrarCajaCodigoCliente() {
		return mostrarCajaCodigoCliente;
	}

	public void setMostrarCajaCodigoCliente(boolean mostrarCajaCodigoCliente) {
		this.mostrarCajaCodigoCliente = mostrarCajaCodigoCliente;
	}

	public boolean isMostrarCajaRazonSocial() {
		return mostrarCajaRazonSocial;
	}

	public void setMostrarCajaRazonSocial(boolean mostrarCajaRazonSocial) {
		this.mostrarCajaRazonSocial = mostrarCajaRazonSocial;
	}

	public List<ClienteDatos> getListCliente() {
		return listCliente;
	}

	public void setListCliente(List<ClienteDatos> listCliente) {
		this.listCliente = listCliente;
	}
}
